package cn.kingyea.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;

/**
 * 随机生成中文姓名，性别，Email，手机号
 * 
 * @author X-rapido
 */
public class DataGenerator {

	public static String base = "abcdefghijklmnopqrstuvwxyz0123456789";
	private static String firstName = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄魏加封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘姜詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲台从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍却璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庚终暨居衡步都耿满弘匡国文寇广禄阙东殴殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后江红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于仲孙太叔申屠公孙乐正轩辕令狐钟离闾丘长孙慕容鲜于宇文司徒司空亓官司寇仉督子车颛孙端木巫马公西漆雕乐正壤驷公良拓拔夹谷宰父谷粱晋楚阎法汝鄢涂钦段干百里东郭南门呼延归海羊舌微生岳帅缑亢况后有琴梁丘左丘东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟第五言福百家姓续";
	private static String girl = "秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽 ";
	private static String boy = "伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";
	private static final String[] email_suffix = "@gmail.com,@yahoo.com,@msn.com,@hotmail.com,@aol.com,@ask.com,@live.com,@qq.com,@0355.net,@163.com,@163.net,@263.net,@3721.net,@yeah.net,@googlemail.com,@126.com,@sina.com,@sohu.com,@yahoo.com.cn".split(",");

	public static int getRandomNum(int start, int end) {
		return (int) (Math.random() * (end - start + 1) + start);
	}

	/**
	 * 返回Email
	 * 
	 * @param lMin
	 *            最小长度
	 * @param lMax
	 *            最大长度
	 * @return
	 */
	public static String getEmail(int lMin, int lMax) {
		int length = getRandomNum(lMin, lMax);
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < length; i++) {
			int number = (int) (Math.random() * base.length());
			sb.append(base.charAt(number));
		}
		sb.append(email_suffix[(int) (Math.random() * email_suffix.length)]);
		return sb.toString();
	}

	/**
	 * 返回手机号码
	 */
	private static String[] telFirst = "134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153"
			.split(",");

	public static String getTel() {
		int index = getRandomNum(0, telFirst.length - 1);
		String first = telFirst[index];
		String second = String.valueOf(getRandomNum(1, 888) + 10000).substring(1);
		String thrid = String.valueOf(getRandomNum(1, 9100) + 10000).substring(1);
		return first + second + thrid;
	}

	/**
	 * 返回中文姓名
	 */
	public static String getChineseName() {
		int index = getRandomNum(0, firstName.length() - 1);
		String first = firstName.substring(index, index + 1);
		int sex = getRandomNum(0, 1);
		String str = boy;
		int length = boy.length();
		if (sex == 0) {
			str = girl;
			length = girl.length();
		}
		index = getRandomNum(0, length - 1);
		String second = str.substring(index, index + 1);
		int hasThird = getRandomNum(0, 1);
		String third = "";
		if (hasThird == 1) {
			index = getRandomNum(0, length - 1);
			third = str.substring(index, index + 1);
		}
		return first + second + third;
	}

	/**
	 * 返回性别
	 */
	public static String getSex(){
		int sex = getRandomNum(0, 1);
		return String.valueOf(sex);
	}
	
	/**
	 * 返回民族
	 */
	private static String[] nations = new String[] { "汉族", "蒙古族", "回族", "藏族", "维吾尔族",
		"苗族", "彝族", "壮族", "布依族", "朝鲜族", "满族", "侗族", "瑶族", "白族", "土家族",
		"哈尼族", "哈萨克族", "傣族", "黎族", "傈僳族", "佤族", "畲族", "高山族", "拉祜族",
		"水族", "东乡族", "纳西族", "景颇族", "柯尔克孜族", "土族", "达斡尔族", "仫佬族", "羌族",
		"布朗族", "撒拉族", "毛南族", "仡佬族", "锡伯族", "阿昌族", "普米族", "塔吉克族", "怒族",
		"乌孜别克族", "俄罗斯族", "鄂温克族", "德昂族", "保安族", "裕固族", "京族", "塔塔尔族",
		"独龙族", "鄂伦春族", "赫哲族", "门巴族", "珞巴族", "基诺族" };
	public static String getNation(){
		int index = getRandomNum(0, nations.length - 1);
		return nations[index];
	}
	
	
	public static List<Put> getPutList(byte[] familyName){
		List<Put> puts = new ArrayList<Put>();
		
		IdCardGenerator idcardGenerator = new IdCardGenerator();
		
		int initId = 10;
		Map<String,String> userInfo = null;
		Put put = null;
		for(int i=0;i<1000;i++){
			userInfo = idcardGenerator.generateUserInfo();
			//rowKey为长度20的自增字符串序列
			put = new Put(Bytes.toBytes(String.format("%020d", initId+i)));
			put.addColumn(familyName, Bytes.toBytes("id"), Bytes.toBytes(String.valueOf(initId+i)));
			put.addColumn(familyName, Bytes.toBytes("name"), Bytes.toBytes(DataGenerator.getChineseName()));
			put.addColumn(familyName, Bytes.toBytes("sex"), Bytes.toBytes(DataGenerator.getSex()));
			put.addColumn(familyName, Bytes.toBytes("bdate"), Bytes.toBytes(userInfo.get("birthday")));
			put.addColumn(familyName, Bytes.toBytes("id_code"), Bytes.toBytes(userInfo.get("idcard")));
			put.addColumn(familyName, Bytes.toBytes("xzqh"), Bytes.toBytes(userInfo.get("areacode")));
			put.addColumn(familyName, Bytes.toBytes("address"), Bytes.toBytes(userInfo.get("address")));
			put.addColumn(familyName, Bytes.toBytes("created"), Bytes.toBytes(String.valueOf(System.currentTimeMillis())));
			put.addColumn(familyName, Bytes.toBytes("last_updated"), Bytes.toBytes(String.valueOf(System.currentTimeMillis())));
			
			puts.add(put);
		}
		return puts;
	}
	
}